【VBScript】Windowsコマンドの戻り値の取得方法についての注意点 您所在的位置:网站首页 vba exec 【VBScript】Windowsコマンドの戻り値の取得方法についての注意点

【VBScript】Windowsコマンドの戻り値の取得方法についての注意点

2023-10-17 20:46| 来源: 网络整理| 查看: 265

ホーム > VBScript 逆引きリファレンス

VBScriptで、Windowsコマンド(コマンドプロンプトのコマンド)を実行した時の戻り値を取得する方法についての注意事項を説明しています。

はじめに戻り値が正しく取得されないパターン戻り値が正しく取得されるパターン結論関連記事 はじめに

本記事では、WshShellの「Run」メソッドを使用して、Windowsのコマンドを実行した場合に、コマンドの戻り値が正しく取得出来ない事象が発生したため、戻り値が正しく取得出来たパターンと出来なかったパターンを比べつつ、どのようにすれば正しく取得出来るか見ていきたいと思います。

ここでは、WshShell.Runメソッドの使用方法については触れません。詳しく知りたい方は、下記の記事を参考にして下さい。

【VBScript】Windowsアプリケーションの起動方法VBScriptで、メモ帳や電卓などのWindowsアプリケーションを起動する方法を解説します。syutaku.blog2022.12.15 戻り値が正しく取得されないパターン

まず、取得出来ないパターンを見ていきたいと思います。

こちらは、存在しない宛先に対して、pingを実行しています。>コマンド:ping -n 1 8.8.8.99

この場合、pingが失敗しているため、戻り値は「1」となるはずが、「0」が表示されます。

Option Explicit ' Windowsのコマンド Const cmd = "ping -n 1 8.8.8.99" ' 戻り値を格納する変数 Dim rc rc = 0 ' WSHオブジェクトの作成 Dim objShell Set objShell = CreateObject("WScript.Shell") ' Windowsコマンドの実行 rc = objShell.Run("cmd /c " & cmd, 0) ' 戻り値の表示 WScript.Echo "戻り値:" & rc ' WSHオブジェクトの破棄 Set objShell = Nothing

戻り値が正しく取得されるパターン

次に、正しく取得するパターンになります。

こちらも同じく、存在しない宛先に対して、pingを実行しています。>コマンド:ping -n 1 8.8.8.99

こちらは、pingが失敗しているため、戻り値は想定通り「1」となっています。

Option Explicit ' Windowsのコマンド Const cmd = "ping -n 1 8.8.8.99" ' 戻り値を格納する変数 Dim rc rc = 0 ' WSHオブジェクトの作成 Dim objShell Set objShell = CreateObject("WScript.Shell") ' Windowsコマンドの実行 rc = objShell.Run("cmd /c " & cmd, 0, True) ' 戻り値の表示 WScript.Echo "戻り値:" & rc ' WSHオブジェクトの破棄 Set objShell = Nothing 結論

前項では似たようなソースコードで、pingを実行し、異なる戻り値が表示されることを確認しました。では、何故異なる戻り値が返ってきているのかについて説明したいと思います。

まず、ポイントとなるのが、ソースコードの15行目になります。

正しく取得されない:rc = objShell.Run(“cmd /c ” & cmd, 0)正しく取得される :rc = objShell.Run(“cmd /c ” & cmd, 0, True)

上記の赤字部分(Runメソッドの第3引数)が、TrueかFalseかで挙動が変わっているようです。*既定値は「False」なので、省略時は「False」として扱われる。

赤字部分の引数についてですが、コマンドの実行を同期[True]して実行するか、非同期[False]で実行するかを指定しています。

上記を踏まえて、正しく取得されない方(非同期でコマンドを実行する)を実行すると、確かにコマンドの終了前に戻り値が表示されているように見えます。

以上から、若干憶測が入りますが、非同期でコマンドを実行した場合は、コマンドの実行結果が正しく取得出来ないようです。(コマンドの実行が完了するまで待たないので当然かもしれませんが)なので、実行結果を取得したい場合は、コマンドを同期実行する必要があります。

リンク 関連記事 【VBScript】Windowsのコマンドを実行するVBScriptで、Windows(コマンドプロンプト)のコマンドを直接実行する方法を解説します。syutaku.blog2022.12.15 【VBScript】Windowsアプリケーションの起動方法VBScriptで、メモ帳や電卓などのWindowsアプリケーションを起動する方法を解説します。syutaku.blog2022.12.15


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有